Background Services হলো এমন সেবা বা প্রক্রিয়া যা ব্যবহারকারীর সরাসরি ইন্টারঅ্যাকশন ছাড়া চলতে থাকে এবং সাধারণত একটি অ্যাপ্লিকেশন বা অপারেটিং সিস্টেমের পটভূমিতে কার্যকরী থাকে। এটি অ্যাপ্লিকেশন বা সিস্টেমের কাজ চালিয়ে যেতে সহায়ক, এমনকি যখন ব্যবহারকারী অ্যাপ্লিকেশনটি সক্রিয়ভাবে ব্যবহার করছে না। Background Services বিভিন্ন ধরনের কাজ যেমন ডেটা সিঙ্ক্রোনাইজেশন, বিজ্ঞপ্তি প্রেরণ, অডিও বা ভিডিও স্ট্রিমিং, পুশ নোটিফিকেশন ইত্যাদি পরিচালনা করতে ব্যবহৃত হয়।
এখানে আমরা দেখবো কিভাবে ব্যাকগ্রাউন্ড সার্ভিস পরিচালনা করা যায় বিভিন্ন প্ল্যাটফর্মে, যেমন Android, iOS, এবং Web অ্যাপ্লিকেশন।
Android এ Background Services পরিচালনা করা
Android এ ব্যাকগ্রাউন্ড সার্ভিস পরিচালনা করতে Service ক্লাস ব্যবহৃত হয়। এটি মূলত অ্যাপ্লিকেশন চলমান থাকাকালীন এমন কাজ করতে ব্যবহৃত হয়, যা ব্যবহারকারী ইন্টারফেসে প্রদর্শিত না হলেও চলতে থাকে।
Service Types in Android:
- Started Service:
- যখন সার্ভিসটি শুরু হয়, এটি ব্যাকগ্রাউন্ডে চলতে থাকে এবং সম্পন্ন হওয়া পর্যন্ত অব্যাহত থাকে।
- উদাহরণস্বরূপ, ডেটা ডাউনলোড করা বা লম্বা সময় ধরে চলা কোনো কাজ।
- Bound Service:
- অন্য কম্পোনেন্ট (যেমন Activity বা অন্য Service) সার্ভিসের সাথে যোগাযোগ করতে পারে। এটি সুনির্দিষ্ট কাজ করার জন্য ব্যবহার হয়।
Service শুরু করার উদাহরণ:
// MyService.java
public class MyService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// ব্যাকগ্রাউন্ড কাজ যেমন ডেটা সিঙ্ক্রোনাইজেশন বা নেটওয়ার্ক কল করা
new Thread(new Runnable() {
@Override
public void run() {
// ব্যাকগ্রাউন্ডে কাজ শুরু করুন
Log.d("MyService", "Service is running in background");
}
}).start();
return START_STICKY; // সার্ভিস চলতে থাকবে
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
// Service চালু করা
Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);
এই কোডে:
- onStartCommand() মেথডের মাধ্যমে সার্ভিস শুরু করা হয়েছে এবং ব্যাকগ্রাউন্ড থ্রেডে কাজ করা হচ্ছে।
Background Work Constraints (Android 8.0 and later):
Android 8.0 (API level 26) থেকে কিছু নতুন নিয়ম চালু করা হয়েছে যা ব্যাকগ্রাউন্ড সার্ভিসের কার্যকারিতা সীমিত করে। যেমন, এটি শুধুমাত্র ফোরগ্রাউন্ড সার্ভিস হিসেবে চলতে পারে, যখন ব্যাকগ্রাউন্ডে কোন কাজ সম্পাদন করতে হবে।
Foreground Service উদাহরণ:
// NotificationChannel তৈরি করা
NotificationChannel channel = new NotificationChannel("my_channel", "My Background Service", NotificationManager.IMPORTANCE_DEFAULT);
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.createNotificationChannel(channel);
// Notification তৈরি
Notification notification = new NotificationCompat.Builder(this, "my_channel")
.setContentTitle("Service Running")
.setContentText("Service is running in background")
.setSmallIcon(R.drawable.notification_icon)
.build();
// Foreground Service চালু
startForeground(1, notification);
iOS এ Background Services পরিচালনা করা
iOS এ ব্যাকগ্রাউন্ড সার্ভিসের জন্য Background Tasks বা Background Fetch ব্যবহৃত হয়। এটি অ্যাপ্লিকেশনটির ব্যাকগ্রাউন্ডে কিছু নির্দিষ্ট কাজ চালানোর অনুমতি দেয়, যেমন ডেটা সিঙ্ক্রোনাইজেশন, নোটিফিকেশন পাঠানো, বা কাজ সম্পন্ন হওয়ার জন্য অপেক্ষা করা।
iOS এ Background Fetch উদাহরণ:
// AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Background Fetch Enable করা
UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum)
return true
}
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// ব্যাকগ্রাউন্ডে ডেটা ফেচিং
fetchDataFromServer { newData in
if newData {
completionHandler(.newData)
} else {
completionHandler(.noData)
}
}
}
এখানে:
- setMinimumBackgroundFetchInterval দ্বারা অ্যাপ্লিকেশনকে ব্যাকগ্রাউন্ডে ডেটা ফেচ করার জন্য সেট করা হয়েছে।
- performFetchWithCompletionHandler মেথডটি ব্যাকগ্রাউন্ডে ডেটা ফেচ করার জন্য ব্যবহৃত হয়।
Background Task Example (iOS 13 and later):
// Background task শুরু করা
let taskID = application.beginBackgroundTask {
// Background task শেষ হলে কার্যক্রমের জন্য কলব্যাক
application.endBackgroundTask(taskID)
}
// ব্যাকগ্রাউন্ড কাজ সম্পন্ন করার জন্য
performBackgroundTask {
application.endBackgroundTask(taskID)
}
Web Applications এ Background Services পরিচালনা করা
ওয়েব অ্যাপ্লিকেশনে ব্যাকগ্রাউন্ড কাজ পরিচালনা করার জন্য আপনি Web Workers, Service Workers, এবং Background Sync ব্যবহার করতে পারেন।
Web Workers উদাহরণ:
// ব্যাকগ্রাউন্ড থ্রেডে কাজ করা
const worker = new Worker('worker.js');
// worker.js
self.onmessage = function(e) {
console.log('Received data from main thread:', e.data);
self.postMessage('Data processed');
};
// মূল থ্রেডে worker থেকে ডেটা পাঠানো
worker.postMessage('Start Processing');
worker.onmessage = function(e) {
console.log('Message from worker:', e.data);
};
এখানে, Web Worker ব্যবহার করে মূল থ্রেড থেকে আলাদা থ্রেডে ব্যাকগ্রাউন্ড কাজ করা হচ্ছে। এটি UI-কে অবরুদ্ধ না করে ব্যাকগ্রাউন্ডে ডেটা প্রক্রিয়া করতে সাহায্য করে।
Service Workers এবং Background Sync:
Service Workers ও Background Sync ওয়েব অ্যাপ্লিকেশনগুলোকে ব্যাকগ্রাউন্ডে সিঙ্ক্রোনাইজেশন এবং পুশ নোটিফিকেশন প্রেরণ করতে সক্ষম করে।
// Service Worker Registration
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/service-worker.js').then(function(registration) {
console.log('Service Worker registered with scope:', registration.scope);
});
}
// Background Sync
navigator.serviceWorker.ready.then(function(registration) {
registration.sync.register('syncData');
});
সারাংশ
Background Services বিভিন্ন অ্যাপ্লিকেশন এবং অপারেটিং সিস্টেমে নির্দিষ্ট কাজগুলি চালাতে সহায়ক, এমনকি যখন ব্যবহারকারী অ্যাপ্লিকেশনটি সক্রিয়ভাবে ব্যবহার করছে না। Android, iOS, এবং Web অ্যাপ্লিকেশনে ব্যাকগ্রাউন্ড সার্ভিস পরিচালনা করার জন্য আলাদা পদ্ধতি ব্যবহৃত হয়। Android এবং iOS তে এটি Services বা Background Fetch এর মাধ্যমে করা হয়, যেখানে Web অ্যাপ্লিকেশনগুলিতে Web Workers এবং Service Workers ব্যবহার করা হয়। Foreground Services বা Service Workers ব্যাকগ্রাউন্ডে কাজ পরিচালনা করতে এবং ব্যবহারকারীর অভিজ্ঞতা সুরক্ষিত রাখতে সহায়ক।
Read more